package offer2

/**
原题链接:
https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/

剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点，同一层的节点按照从左到右的顺序打印。

例如:
给定二叉树: [3,9,20,null,null,15,7],

3
/ \
9  20
/  \
15   7

返回：
[3,9,20,15,7]
*/

/*
思路: 层序遍历二叉树   使用辅助队列
*/
func levelOrder1(root *TreeNode) []int {

	//节点数组
	var queue []*TreeNode
	//结果数组
	var res []int

	//如果根节点为
	if root == nil {
		return nil
	}

	//根节点添加入队列
	queue = append(queue, root)

	//只要q中还有元素, 进行循环
	for len(queue) > 0 {

		//获取队列头部元素
		node := queue[0]

		//弹出队列头部元素
		queue = queue[1:]

		//结果数组添加当前元素的值
		res = append(res, node.Val)

		//分别将当前节点的左右节点, 加入到队列中
		if node.Left != nil {
			queue = append(queue, node.Left)
		}
		if node.Right != nil {
			queue = append(queue, node.Right)
		}
	}

	//返回结果数组
	return res
}
